package com.example.spindrift.Controllers;

import com.example.spindrift.models.SysSong;
import com.example.spindrift.service.FileService;
import com.example.spindrift.service.SongService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/Song")
public class SongController {
    @Autowired
    FileService fileService;
    @Autowired
    SongService songService;

    /**
     * 获取所有歌曲信息
     * @return
     */
    @GetMapping("/getAllSong")
    public Object getAllSong(){
        return songService.getAllSong();
    }

    /**
     * 根据歌曲类型获取歌曲信息
     * @param typeId 歌曲类型ID
     * @return
     */
    @GetMapping("/getSongByType")
    public List<SysSong> getSongByType(@RequestParam Integer typeId) {
        return songService.getSongByType(typeId);
    }

    /**
     * 根据歌曲名称获取歌曲信息
     * @param songName 歌曲名称
     * @return
     */
    @GetMapping("/getSongByName")
    public List<SysSong> getSongByName(@RequestParam String songName) {
        return songService.getSongByName(songName);
    }

    /**
     * 根据歌曲名称进行模糊查询
     * @param keyword 歌曲关键字
     * @return
     */
    @GetMapping("/searchSong")
    public List<SysSong> searchSong(@RequestParam String keyword) {
        return songService.searchSong(keyword);
    }

    /**
     * 根据歌曲ID查询歌曲信息
     * @param songId 歌曲ID
     * @return
     */
    @GetMapping("/getSongById")
    public SysSong getSongById(@RequestParam Integer songId) {
        return songService.getSongById(songId);
    }

    /**
     * 根据歌手ID获取歌手ID
     * @param singId
     * @return
     */
    @GetMapping("/getSongBySing")
    public List<SysSong> getSongBySing(@RequestParam Integer singId) {
        return songService.getSongBySing(singId);
    }

    /**
     * 获取热力排行榜数据
     * @return
     */
    @GetMapping("/getHostRank")
    public List<SysSong> getHostRank(){
        return songService.getHostRank();
    }
    /**
     * 获取收藏排行
     * @return
     */
    @GetMapping("/getCollectRank")
    public List<SysSong> getCollectRank(){
        return songService.getCollectRank();
    }

    /**
     * 获取最新分享 歌曲列表
     * @return
     */
    @GetMapping("/getNewSong")
    public List<SysSong> getNewSong(){
        return songService.getNewSong();
    }

    /**
     * 查询指定用户分享的音乐信息
     * @param userId 用户ID
     * @return
     */
    @GetMapping("/getSongByUser")
    public List<SysSong> getSongByUser(@RequestParam Integer userId){
        return songService.getSongByUser(userId);
    }

    /**
     * 添加一条歌曲信息
     * @param song 歌曲信息
     * @return
     */
    @PostMapping("/insertSong")
    public Boolean insertSong(@RequestBody SysSong song) {
        return songService.insertSong(song) > 0;
    }

    /**
     * 更新一条歌曲信息
     * @param song 歌曲信息
     * @return
     */
    @PutMapping("/updateSong")
    public Boolean updateSong(@RequestBody SysSong song) {
        return songService.updateSong(song) > 0;
    }

    /**
     * 更新歌曲的状态
     * @param songId 歌曲ID
     * @param state 状态值
     * @return
     */
    @GetMapping("/updateSongState")
    public Boolean updateSongState(@RequestParam Integer songId, @RequestParam String state) {
        return songService.updateSongState(songId,state) > 0;
    }

    /**
     * 更新歌曲热度（播放量）
     * @param songId 歌曲ID
     * @param host 新增热度量
     * @return
     */
    @PutMapping("/updateSongHost")
    public Boolean updateSongHost(@RequestParam Integer songId,@RequestParam Integer host){
        return songService.updateSongHost(songId,host) > 0;
    }

    /**
     * 删除一条歌曲信息
     * @param songId 歌曲ID
     * @return
     */
    @DeleteMapping("/deleteSong")
    public Boolean deleteSong(@RequestParam Integer songId) {
        return songService.deleteSong(songId) > 0;
    }
}
